走到第 30 天,這個專案的 MVP 已經完成。最後一篇,我想用 MVP 的角度回頭看:這個專案做了什麼、刻意沒做什麼,再來聊聊「如果還想延伸,可以往哪些方向發展」。這些是我做完之後的發想,有些我評估過、有些只是想法,我會盡量誠實標明哪些是做過的、哪些是讀來的。
MVP(Minimum Viable Product,最小可行產品)
MVP 不是「半成品」,也不是「做得很爛的版本」,而是刻意只做最重要的部分,但整條流程要能從頭跑到尾。比喻:想開一間餐廳,不是先把裝潢、外送、會員制度全部做好,而是先用一張桌子、三道菜開張,確認真的有人來吃,再決定要往哪裡擴充。
MVP 有兩個關鍵:
技術債:為了先做出來,刻意留下、之後要還的取捨
技術債不一定是壞事。只要是「知道它存在、也評估過代價」的取捨,就是一種誠實的選擇。真正的問題是不知道它存在。
成功標準: 使用者輸入 → 前端 → API → 程式算營養 → AI 理解並生成菜單 → 前端顯示 → 公開網址可以操作。
| MVP 做了 |
|---|
| 營養計算:BMR、TDEE、三大營養素、六大類份數,全部由程式用固定公式算 |
| AI 只負責理解生活型態、從候選食物中挑選 |
| 食物資料庫(約 1900 筆外食資料,放在 S3) |
| 前端表單、結果呈現、深色模式 |
| 部署上雲,有公開網址 |
MVP背後的取捨讓我能在有限時間內先把整條路走通,代價是這個專案目前功能單一,沒有其他更進階的功能,例如每日追蹤、也沒有真正的 API 防護,這些在前面幾篇(尤其 Day28)都已經記錄過。
MVP 做完不代表每個功能都要補,而是看「現在最痛的問題在哪」,再決定往哪個方向長。我把可能的延伸分成五個方向:
| 方向 | 想解決的問題 | 可能的做法 |
|---|---|---|
| 輸入更準 | 自由文字容易寫得籠統,AI 抓不到細節 | 進階引導式問診 |
| 持續互動 | 目前只有一次性建議,沒有每日追蹤 | 串 LINE Bot |
| 資料更廣、更準 | 品牌不夠多、關鍵字比對有長尾問題、想讓 AI 讀官方文件 | 資料庫結合 RAG,換更適合的檢索方式 |
| 產出更穩 | 菜單偶爾出現預期外的內容 | 更細緻的資料設計、驗證和 prompt |
| 營運面 | API 沒有防護、規模變大後成本和效能風險 | API Key 加 Usage Plan、換資料庫、調高額度 |
目前使用者在一個大輸入框裡自由描述飲食,是單次輸入,AI 沒辦法追問。自由文字門檻低,但容易寫得籠統、漏掉細節。
我的想法是:保留自由文字當預設,另外加一個「進階功能」入口,點進去後改成一題一題引導,參考營養師常用的「24 小時飲食回憶錄」問診邏輯,問出吃什麼、什麼時候吃、大約多少份量。
為什麼不直接取代原本的設計?因為強制所有人都走問答流程,會拉高使用門檻、拖慢速度,而且如果要花太多時間填寫會降低使用意願,所以定位成「選用的進階功能」。至於要問哪些問題、順序怎麼排,就可以參考營養師的問診經驗來設計。
網頁版目前是一次性產生建議,沒有登入、也沒有歷史紀錄。我想過的做法是:使用者在網頁確定飲食方向後,可以透過 LINE 每天記錄吃了什麼,AI 依據當初建立的飲食型態給回饋和鼓勵。LINE 是台灣使用者很熟悉的介面。
但要做每日追蹤,勢必得面對兩件事:怎麼辨識使用者,以及資料存哪裡,也就是登入和資料庫。這兩件事正是 MVP 刻意排除的,所以這個延伸比較像是「下一個階段」,不是小加功能。
這是我最想多聊的一個延伸,因為它跟這個專案的核心最有關。
先搞清楚:什麼是 RAG?
RAG(檢索增強生成)的白話意思是:不要讓 AI 憑記憶回答,而是先去資料庫「查」出相關內容,再把查到的真實資料交給 AI 參考。它有三步:檢索(去資料來源查)、增強(把查到的資料放進 prompt)、生成(AI 依據資料回答)。
檢索的方式不只一種:
這個專案現在怎麼做: 其實已經是 RAG。生成菜單前,程式先從約 1900 筆食物資料裡,用 mealSlot、cuisineStyle、熱量預算這些結構化欄位篩選出候選食物,把候選清單放進 prompt 讓 AI 挑,份數再由程式計算。資料放在 S3 的 JSON 檔,Lambda 讀進來後篩選(見 Day21 到 Day24)。這是「結構化比對」的檢索。
那 AWS 上有沒有更適合的做法? 有,而且選項不少。以下是我查官方資料整理的,我還沒有實際用過這些方案:
| 做法 | 白話 | 適合什麼 | 代價或注意 |
|---|---|---|---|
| 現在的做法:S3 JSON 加程式篩選 | 食物存成 JSON,Lambda 整包讀進來,用欄位條件篩選 | 資料量小(千筆級)、欄位固定、需要確定性 | 關鍵字比對有長尾問題;資料變大後要整包載入很沒效率 |
| DynamoDB | 真正的資料庫,可以只查需要的那幾筆 | 資料量長大(幾千筆以上)、仍是結構化查詢 | 要重新設計資料表和查詢方式 |
| Bedrock Knowledge Bases 加向量資料庫 | AWS 託管的 RAG:自動把文件切段、轉成向量、存進向量資料庫,生成時自動檢索 | 非結構化文字(官方 PDF 手冊)、同義詞或語意比對 | 要選向量資料庫;費用和維運要先評估 |
| Knowledge Bases 的結構化資料檢索 | 用自然語言轉成 SQL,去查 Amazon Redshift 或 SageMaker Lakehouse 裡的資料 | 結構化資料,想用自然語言查 | 支援的資料來源有限;SQL 是 AI 產生的,確定性比固定規則低 |
Bedrock Knowledge Bases 可以搭配的向量資料庫,官方列出的包括 Amazon Aurora(PostgreSQL 的 pgvector)、Amazon OpenSearch(Serverless 或 Managed Cluster)、Neptune Analytics,以及第三方的 MongoDB、Pinecone、Redis 等。另外,Amazon S3 Vectors 在 2025 年 12 月正式上線,可以把向量直接存在 S3,並且能當 Knowledge Bases 的向量儲存。AWS 宣稱它能大幅降低成本,實際費用請以定價頁為準。
我的判斷: 以這個專案現在的規模,食物資料只有約 1900 筆、欄位固定,又需要「AI 不算營養」的確定性,現在的做法已經是合理的 RAG,不必為了「用 AWS 託管服務」而換。真正會讓我考慮換的,是這兩種情境:
資料量成長到幾千筆以上,才會需要考慮換成 DynamoDB。換句話說,「更適合」取決於資料是什麼、規模多大,而不是託管服務一定比較好。
資料來源(AWS 官方公告與文件):
Day29 提到,AI 產出的菜單很難完全控制。除了前面修過的候選池、驗證和 prompt,還有幾個方向可以試:
回到 Day1 那句話: 這個專案從一開始的動機,是想把營養師的專業判斷跟軟體工程結合,看看能玩出什麼新花樣。走完這一輪,在實作讓我體會到:跨領域不只是兩邊的知識都懂一點,而是在理解某個領域(domain)的同時,能清楚知道資訊領域有哪些工具可以解決問題、並且善用它們,同時也知道各種工具(包含 AI)的能耐和邊界。 例如這個專案裡,營養數字交給程式的固定公式、語言理解和挑選交給 AI、最後的專業判斷留給自己,這樣的分工,是在做這個專案的過程中一點一點摸索出來的。
但光知道怎麼分工還不夠,要把它做出來,還得熟悉手上的工具。例如:
這些細節,如果我不知道這些技術的存在,或不知道實作時要注意什麼,就不可能把腦中想要的產品做出來,要不就是產品吐出來的東西,一直達不到我想要的樣子。這有點像「工欲善其事,必先利其器」:領域知識決定我想做什麼,對工具的熟悉,決定我做不做得出來。這是一個滿有趣的過程。
總之呢~這系列文章終於告一段落了!! 謝謝閱讀到最後的你們!!![]()